import { createRouter, createWebHashHistory } from 'vue-router'
import { Modal } from 'ant-design-vue'
import store from '@/library/store'
import staticRouter from './static'
import registerAsyncRoutes from '@/library/router/dynamic'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

// 页进入进度条。。。
NProgress.configure({
  // trickleSpeed: 200, // 自动递增间隔
  minimum: 0.1, // 启动时的最小百分比
  easing: 'ease', // 动画方式：进度条加载方式 ，先慢后快在慢
  speed: 600, // 加载速度：递增进度条的速度
  showSpinner: false // 是否显示加载ico： 右侧加载图标
  // parent:'body' // 加载的容器
})

// console.info(staticRouter)
const router = createRouter({
  history: createWebHashHistory(),
  // history: createWebHashHistory(baseUrl),
  routes: [
    ...staticRouter
  ],
  // 添加激活的类
  linkActiveClass: 'active-link',
  scrollBehavior (to, from, savedPosition) {
    // keep-alive 返回缓存页面后记录浏览位置
    if (savedPosition && to.meta.keepAlive) {
      return savedPosition
    }
    // 异步滚动操作
    return new Promise(resolve => {
      setTimeout(() => {
        resolve({ x: 0, y: 1 })
      }, 0)
    })
  }
})
// 防止路由无限循环
// let routeFlag = false;
// 路由拦截器 - 前置拦截
router.beforeEach((to, form, next) => {
  // 销毁弹出的确认窗
  Modal.destroyAll()
  // 开启progress
  if (!NProgress.isStarted()) {
    NProgress.start()
  }
  console.info(form.fullPath + '>>>> ' + to.path + '.................' + to.name)
  if (to.name != undefined && router.hasRoute(to.name)) {
    console.info('路由存在。。。')
    if (to.meta.auth === false) {
      // console.info('router.beforeEach.................不需检验授权')
      next()
    } else {
      // console.info('router.beforeEach.................检验授权')
      if (store.getters['auth/isAuthorize']) {
        // console.info('router.beforeEach.................已授权')
        next()
      } else {
        // 未登录，跳转登录页面
        // console.info('router.beforeEach.................未授权将跳转到登录页面')
        next({
          name: 'Login',
          query: { redirect: to.fullPath }
        })
      }
    }
  } else {
    //console.info('路由存在不存在。。。')
    // 判断是否存在 注册异步路由。
    if (store.state.hasRoute == undefined || store.state.hasRoute == false) {
      console.info('路由存在不存在。。。注册异步路由::', store.state.hasRoute )
      registerAsyncRoutes()
      next({path: to.path, replace: true})
    } else {
      console.info('路由存在不存在。。。跌到404')
      next({path: '/404NotFund'})
    }
  }
})

// 前置解释
router.beforeResolve(() => {
  // console.info('router.beforeResolve.................')
})
// 路由拦截器 - 后置拦截
router.afterEach((to, from) => {
  // console.info('router.afterEach......................')
  console.info('FROM:' + from.name + ' --->>> TO:' + to.name)
  // 完成NProgress finish progress bar
  NProgress.done()
})
export default router
